rue` after an update to prevent more than one widget
* from being saved per request. This isn't what we want in the REST API, though,
* as we support batch requests.
*/
$widget_object->updated = false;
}
wp_assign_widget_to_sidebar( $widget_id, '' );
$response->set_data(
array(
'deleted' => true,
'previous' => $response->get_data(),
)
);
} else {
wp_assign_widget_to_sidebar( $widget_id, 'wp_inactive_widgets' );
$response = $this->prepare_item_for_response(
array(
'sidebar_id' => 'wp_inactive_widgets',
'widget_id' => $widget_id,
),
$request
);
}
/**
* Fires after a widget is deleted via the REST API.
*
* @since 5.8.0
*
* @param string $widget_id ID of the widget marked for deletion.
* @param string $sidebar_id ID of the sidebar the widget was deleted from.
* @param WP_REST_Response|WP_Error $response The response data, or WP_Error object on failure.
* @param WP_REST_Request $request The request sent to the API.
*/
do_action( 'rest_delete_widget', $widget_id, $sidebar_id, $response, $request );
return $response;
}
/**
* Performs a permissions check for managing widgets.
*
* @since 5.8.0
*
* @param WP_REST_Request $request Full details about the request.
* @return true|WP_Error
*/
protected function permissions_check( $request ) {
if ( ! current_user_can( 'edit_theme_options' ) ) {
return new WP_Error(
'rest_cannot_manage_widgets',
__( 'Sorry, you are not allowed to manage widgets on this site.' ),
array(
'status' => rest_authorization_required_code(),
)
);
}
return true;
}
/**
* Looks for "lost" widgets once per request.
*
* @since 5.9.0
*
* @see retrieve_widgets()
*/
protected function retrieve_widgets() {
if ( ! $this->widgets_retrieved ) {
retrieve_widgets();
$this->widgets_retrieved = true;
}
}
/**
* Saves the widget in the request object.
*
* @since 5.8.0
*
* @global WP_Widget_Factory $wp_widget_factory
* @global array $wp_registered_widget_updates The registered widget update functions.
*
* @param WP_REST_Request $request Full details about the request.
* @param string $sidebar_id ID of the sidebar the widget belongs to.
* @return string|WP_Error The saved widget ID.
*/
protected function save_widget( $request, $sidebar_id ) {
global $wp_widget_factory, $wp_registered_widget_updates;
require_once ABSPATH . 'wp-admin/includes/widgets.php'; // For next_widget_id_number().
if ( isset( $request['id'] ) ) {
// Saving an existing widget.
$id = $request['id'];
$parsed_id = wp_parse_widget_id( $id );
$id_base = $parsed_id['id_base'];
$number = isset( $parsed_id['number'] ) ? $parsed_id['number'] : null;
$widget_object = $wp_widget_factory->get_widget_object( $id_base );
$creating = false;
} elseif ( $request['id_base'] ) {
// Saving a new widget.
$id_base = $request['id_base'];
$widget_object = $wp_widget_factory->get_widget_object( $id_base );
$number = $widget_object ? next_widget_id_number( $id_base ) : null;
$id = $widget_object ? $id_base . '-' . $number : $id_base;
$creating = true;
} else {
return new WP_Error(
'rest_invalid_widget',
__( 'Widget type (id_base) is required.' ),
array( 'status' => 400 )
);
}
if ( ! isset( $wp_registered_widget_updates[ $id_base ] ) ) {
return new WP_Error(
'rest_invalid_widget',
__( 'The provided widget type (id_base) cannot be updated.' ),
array( 'status' => 400 )
);
}
if ( isset( $request['instance'] ) ) {
if ( ! $widget_object ) {
return new WP_Error(
'rest_invalid_widget',
__( 'Cannot set instance on a widget that does not extend WP_Widget.' ),
array( 'status' => 400 )
);
}
if ( isset( $request['instance']['raw'] ) ) {
if ( empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
return new WP_Error(
'rest_invalid_widget',
__( 'Widget type does not support raw instances.' ),
array( 'status' => 400 )
);
}
$instance = $request['instance']['raw'];
} elseif ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) {
$serialized_instance = base64_decode( $request['instance']['encoded'] );
if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) {
return new WP_Error(
'rest_invalid_widget',
__( 'The provided instance is malformed.' ),
array( 'status' => 400 )
);
}
$instance = unserialize( $serialized_instance );
} else {
return new WP_Error(
'rest_invalid_widget',
__( 'The provided instance is invalid. Must contain raw OR encoded and hash.' ),
array( 'status' => 400 )
);
}
$form_data = array(
"widget-$id_base" => array(
$number => $instance,
),
'sidebar' => $sidebar_id,
);
} elseif ( isset( $request['form_data'] ) ) {
$form_data = $request['form_data'];
} else {
$form_data = array();
}
$original_post = $_POST;
$original_request = $_REQUEST;
foreach ( $form_data as $key => $value ) {
$slashed_value = wp_slash( $value );
$_POST[ $key ] = $slashed_value;
$_REQUEST[ $key ] = $slashed_value;
}
$callback = $wp_registered_widget_updates[ $id_base ]['callback'];
$params = $wp_registered_widget_updates[ $id_base ]['params'];
if ( is_callable( $callback ) ) {
ob_start();
call_user_func_array( $callback, $params );
ob_end_clean();
}
$_POST = $original_post;
$_REQUEST = $original_request;
if ( $widget_object ) {
// Register any multi-widget that the update callback just created.
$widget_object->_set( $number );
$widget_object->_register_one( $number );
/*
* WP_Widget sets `updated = true` after an update to prevent more than one widget
* from being saved per request. This isn't what we want in the REST API, though,
* as we support batch requests.
*/
$widget_object->updated = false;
}
/**
* Fires after a widget is created or updated via the REST API.
*
* @since 5.8.0
*
* @param string $id ID of the widget being saved.
* @param string $sidebar_id ID of the sidebar containing the widget being saved.
* @param WP_REST_Request $request Request object.
* @param bool $creating True when creating a widget, false when updating.
*/
do_action( 'rest_after_save_widget', $id, $sidebar_id, $request, $creating );
return $id;
}
/**
* Prepares the widget for the REST response.
*
* @since 5.8.0
*
* @global WP_Widget_Factory $wp_widget_factory
* @global array $wp_registered_widgets The registered widgets.
*
* @param array $item An array containing a widget_id and sidebar_id.
* @param WP_REST_Request $request Request object.
* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
*/
public function prepare_item_for_response( $item, $request ) {
global $wp_widget_factory, $wp_registered_widgets;
$widget_id = $item['widget_id'];
$sidebar_id = $item['sidebar_id'];
if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) {
return new WP_Error(
'rest_invalid_widget',
__( 'The requested widget is invalid.' ),
array( 'status' => 500 )
);
}
$widget = $wp_registered_widgets[ $widget_id ];
$parsed_id = wp_parse_widget_id( $widget_id );
$fields = $this->get_fields_for_response( $request );
$prepared = array(
'id' => $widget_id,
'id_base' => $parsed_id['id_base'],
'sidebar' => $sidebar_id,
'rendered' => '',
'rendered_form' => null,
'instance' => null,
);
if (
rest_is_field_included( 'rendered', $fields ) &&
'wp_inactive_widgets' !== $sidebar_id
) {
$prepared['rendered'] = trim( wp_render_widget( $widget_id, $sidebar_id ) );
}
if ( rest_is_field_included( 'rendered_form', $fields ) ) {
$rendered_form = wp_render_widget_control( $widget_id );
if ( ! is_null( $rendered_form ) ) {
$prepared['rendered_form'] = trim( $rendered_form );
}
}
if ( rest_is_field_included( 'instance', $fields ) ) {
$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );
if ( $widget_object && isset( $parsed_id['number'] ) ) {
$all_instances = $widget_object->get_settings();
$instance = $all_instances[ $parsed_id['number'] ];
$serialized_instance = serialize( $instance );
$prepared['instance']['encoded'] = base64_encode( $serialized_instance );
$prepared['instance']['hash'] = wp_hash( $serialized_instance );
if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
// Use new stdClass so that JSON result is {} and not [].
$prepared['instance']['raw'] = empty( $instance ) ? new stdClass() : $instance;
}
}
}
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$prepared = $this->add_additional_fields_to_object( $prepared, $request );
$prepared = $this->filter_response_by_context( $prepared, $context );
$response = rest_ensure_response( $prepared );
if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
$response->add_links( $this->prepare_links( $prepared ) );
}
/**
* Filters the REST API response for a widget.
*
* @since 5.8.0
*
* @param WP_REST_Response|WP_Error $response The response object, or WP_Error object on failure.
* @param array $widget The registered widget data.
* @param WP_REST_Request $request Request used to generate the response.
*/
return apply_filters( 'rest_prepare_widget', $response, $widget, $request );
}
/**
* Prepares links for the widget.
*
* @since 5.8.0
*
* @param array $prepared Widget.
* @return array Links for the given widget.
*/
protected function prepare_links( $prepared ) {
$id_base = ! empty( $prepared['id_base'] ) ? $prepared['id_base'] : $prepared['id'];
return array(
'self' => array(
'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $prepared['id'] ) ),
),
'collection' => array(
'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
),
'about' => array(
'href' => rest_url( sprintf( 'wp/v2/widget-types/%s', $id_base ) ),
'embeddable' => true,
),
'https://api.w.org/sidebar' => array(
'href' => rest_url( sprintf( 'wp/v2/sidebars/%s/', $prepared['sidebar'] ) ),
),
);
}
/**
* Gets the list of collection params.
*
* @since 5.8.0
*
* @return array[]
*/
public function get_collection_params() {
return array(
'context' => $this->get_context_param( array( 'default' => 'view' ) ),
'sidebar' => array(
'description' => __( 'The sidebar to return widgets for.' ),
'type' => 'string',
),
);
}
/**
* Retrieves the widget's schema, conforming to JSON Schema.
*
* @since 5.8.0
*
* @return array Item schema data.
*/
public function get_item_schema() {
if ( $this->schema ) {
return $this->add_additional_fields_schema( $this->schema );
}
$this->schema = array(
'$schema' => 'http://json-schema.org/draft-04/schema#',
'title' => 'widget',
'type' => 'object',
'properties' => array(
'id' => array(
'description' => __( 'Unique identifier for the widget.' ),
'type' => 'string',
'context' => array( 'view', 'edit', 'embed' ),
),
'id_base' => array(
'description' => __( 'The type of the widget. Corresponds to ID in widget-types endpoint.' ),
'type' => 'string',
'context' => array( 'view', 'edit', 'embed' ),
),
'sidebar' => array(
'description' => __( 'The sidebar the widget belongs to.' ),
'type' => 'string',
'default' => 'wp_inactive_widgets',
'required' => true,
'context' => array( 'view', 'edit', 'embed' ),
),
'rendered' => array(
'description' => __( 'HTML representation of the widget.' ),
'type' => 'string',
'context' => array( 'view', 'edit', 'embed' ),
'readonly' => true,
),
'rendered_form' => array(
'description' => __( 'HTML representation of the widget admin form.' ),
'type' => 'string',
'context' => array( 'edit' ),
'readonly' => true,
),
'instance' => array(
'description' => __( 'Instance settings of the widget, if supported.' ),
'type' => 'object',
'context' => array( 'edit' ),
'default' => null,
'properties' => array(
'encoded' => array(
'description' => __( 'Base64 encoded representation of the instance settings.' ),
'type' => 'string',
'context' => array( 'edit' ),
),
'hash' => array(
'description' => __( 'Cryptographic hash of the instance settings.' ),
'type' => 'string',
'context' => array( 'edit' ),
),
'raw' => array(
'description' => __( 'Unencoded instance settings, if supported.' ),
'type' => 'object',
'context' => array( 'edit' ),
),
),
),
'form_data' => array(
'description' => __( 'URL-encoded form data from the widget admin form. Used to update a widget that does not support instance. Write only.' ),
'type' => 'string',
'context' => array(),
'arg_options' => array(
'sanitize_callback' => static function ( $form_data ) {
$array = array();
wp_parse_str( $form_data, $array );
return $array;
},
),
),
),
);
return $this->add_additional_fields_schema( $this->schema );
}
}
tal_categories = isset( $item['total_categories'] ) ? absint( $item['total_categories'] ) : 0;
$data->total_cookies = isset( $item['total_cookies'] ) ? absint( $item['total_cookies'] ) : 0;
$data->total_scripts = isset( $item['total_scripts'] ) ? absint( $item['total_scripts'] ) : 0;
$data->created_at = isset( $item['created_at'] ) ? sanitize_text_field( $item['created_at'] ) : '';
if ( ! empty( $data ) ) {
$history_details['data'][ $index ] = $data;
}
}
}
$pagination_data = new stdClass();
$pagination_data->per_page = isset( $items['per_page'] ) ? absint( $items['per_page'] ) : 10;
$pagination_data->total = isset( $items['total'] ) ? absint( $items['total'] ) : 0;
if ( ! empty( $pagination_data ) ) {
$history_details['pagination'] = $pagination_data;
}
}
return $history_details;
}
/**
* Get individual scan details
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_Error|WP_REST_Response
*/
public function get_details( $request ) {
$scan_id = (int) $request['id'];
$scan_details = array();
if ( 0 === $scan_id ) {
return new WP_Error( 'cookieyes_rest_invalid_id', __( 'Invalid ID.', 'cookie-law-info' ), array( 'status' => 404 ) );
}
$response = $this->controller->get_scan_details( $scan_id );
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 === $response_code ) {
$items = json_decode( wp_remote_retrieve_body( $response ), true );
$data = new stdClass();
$data->id = isset( $items['id'] ) ? absint( $items['id'] ) : 0;
$scan_date = isset( $items['scan_date'] ) ? sanitize_text_field( $items['scan_date'] ) : '';
if ( ! empty( $scan_date ) ) {
$scan_date_time = new \DateTime( $scan_date );
$data->scan_date = cky_i18n_date( $scan_date_time->format( 'U' ) );
}
$data->scan_status = isset( $items['scan_status'] ) ? sanitize_text_field( $items['scan_status'] ) : '';
$data->total_pages = isset( $items['total_pages'] ) ? absint( $items['total_pages'] ) : 0;
$data->total_categories = isset( $items['total_categories'] ) ? absint( $items['total_categories'] ) : 0;
$data->total_cookies = isset( $items['total_cookies'] ) ? absint( $items['total_cookies'] ) : 0;
$data->total_scripts = isset( $items['total_scripts'] ) ? absint( $items['total_scripts'] ) : 0;
if ( isset( $items['categories'] ) ) {
foreach ( $items['categories'] as $category_index => $category ) {
$data->categories[ $category_index ]['name'] = isset( $category['name'] ) ? sanitize_text_field( $category['name'] ) : '';
if ( isset( $category['cookies'] ) ) {
foreach ( $category['cookies'] as $cookie ) {
$cookie_id = $cookie['cookie_id'];
$data->categories[ $category_index ]['cookies'][ $cookie_id ]['cookie_id'] = isset( $cookie['cookie_id'] ) ? sanitize_text_field( $cookie['cookie_id'] ) : '';
$data->categories[ $category_index ]['cookies'][ $cookie_id ]['description'] = isset( $cookie['description'] ) ? sanitize_text_field( $cookie['description'] ) : '';
$data->categories[ $category_index ]['cookies'][ $cookie_id ]['duration'] = isset( $cookie['duration'] ) ? sanitize_text_field( $cookie['duration'] ) : '';
$data->categories[ $category_index ]['cookies'][ $cookie_id ]['type'] = isset( $cookie['type'] ) ? sanitize_text_field( $cookie['type'] ) : '';
}
}
}
}
if ( isset( $items['urls'] ) ) {
foreach ( $items['urls'] as $url_index => $url ) {
$data->urls[ $url_index ]['count'] = isset( $url['count'] ) ? absint( $url['count'] ) : 0;
$data->urls[ $url_index ]['name'] = isset( $url['name'] ) ? sanitize_text_field( $url['name'] ) : '';
}
}
$scan_details = $data;
}
return $scan_details;
}
/**
* Initiate a new scan by sending scan request to web app
*
* @param WP_REST_Request $request Full details about the request.
* @return WP_Error|WP_REST_Response
*/
public function create_item( $request ) {
$can_scan_response = $this->controller->can_scan();
$can_scan_response_code = wp_remote_retrieve_response_code( $can_scan_response );
if ( 200 === $can_scan_response_code ) {
$can_scan_response = json_decode( wp_remote_retrieve_body( $can_scan_response ), true );
if ( ! $can_scan_response['canScan'] ) {
return new WP_Error( 'cky_rest_scan_initiated', __( 'Could not initiate the scan, please try again', 'cookie-law-info' ), array( 'status' => 200 ) );
}
}
$response = $this->controller->initiate_scan();
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 === $response_code || 400 === $response_code ) {
$response = json_decode( wp_remote_retrieve_body( $response ), true );
if ( 200 === $response_code ) {
$this->controller->update_info(
array(
'status' => 'initiated',
'date' => isset( $response['created_at'] ) ? $response['created_at'] : '',
'type' => isset( $response['type'] ) ? $response['type'] : '',
'id' => isset( $response['id'] ) ? $response['id'] : '',
)
);
return $response;
} else {
$this->controller->update_info(
array(
'status' => 'initiated',
)
);
return rest_ensure_response( $this->controller->get_info() );
}
} else {
return new WP_Error( 'cky_rest_scan_initiated', __( 'Could not initiate the scan, please try again', 'cookie-law-info' ), array( 'status' => 200 ) );
}
return json_decode( wp_remote_retrieve_body( $response ), true );
}
/**
* Format data
*
* @param object $object Item data.
* @return void
*/
protected function get_formatted_item_data( $object ) {
$data = $object->get_data();
}
/**
* Get the Cookies's schema, conforming to JSON Schema.
*
* @return array
*/
public function get_item_schema() {
$schema = array(
'$schema' => 'http://json-schema.org/draft-04/schema#',
'title' => 'cookie_categories',
'type' => 'object',
'properties' => array(
'id' => array(
'description' => __( 'Unique identifier for the resource.', 'cookie-law-info' ),
'type' => 'integer',
'context' => array( 'view' ),
'readonly' => true,
),
'date_created' => array(
'description' => __( 'The date the cookie was created, as GMT.', 'cookie-law-info' ),
'type' => 'date-time',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'date_modified' => array(
'description' => __( 'The date the cookie was last modified, as GMT.', 'cookie-law-info' ),
'type' => 'date-time',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'name' => array(
'description' => __( 'Cookie category name.', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'slug' => array(
'description' => __( 'Cookie category unique name', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'description' => array(
'description' => __( 'Cookie category description.', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'default_state' => array(
'description' => __( 'Cookie type.', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'head_scripts' => array(
'description' => __( 'Cookie scripts.', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'body_scripts' => array(
'description' => __( 'Cookie scripts.', 'cookie-law-info' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
),
'cookies' => array(
'description' => __( 'Cookie count.', 'cookie-law-info' ),
'type' => 'integer',
'context' => array( 'view' ),
),
),
);
return $this->add_additional_fields_schema( $schema );
}
} // End the class.
Fatal error: Uncaught Error: Class 'CookieYes\Lite\Admin\Modules\Scanner\Api\Api' not found in /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/admin/modules/scanner/class-scanner.php:40
Stack trace:
#0 /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/admin/modules/scanner/class-scanner.php(29): CookieYes\Lite\Admin\Modules\Scanner\Scanner->load_apis(Object(CookieYes\Lite\Admin\Modules\Scanner\Includes\Controller))
#1 /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/includes/class-modules.php(54): CookieYes\Lite\Admin\Modules\Scanner\Scanner->init()
#2 /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/admin/class-admin.php(179): CookieYes\Lite\Includes\Modules->__construct('scanner')
#3 /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/admin/class-admin.php(81): CookieYes\Lite\Admin\Admin->load_modules()
#4 /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/includes/class- in /var/www/html/helitower.com.br/web/wp-content/plugins/cookie-law-info/lite/admin/modules/scanner/class-scanner.php on line 40