<?php namespace iThemesSecurity\Dashboard\Cards; use iThemesSecurity\Site_Scanner\Repository\Scans_Repository; class Security_Summary_Card extends \ITSEC_Dashboard_Card { /** @var Repository */ private $repository; public function __construct( Scans_Repository $repository ) { $this->repository = $repository; } public function get_slug() { return 'security-summary'; } public function get_label() { return __( 'Security Summary', 'better-wp-security' ); } public function get_size() { return [ 'minW' => 2, 'minH' => 1, 'maxW' => 2, 'maxH' => 1, 'defaultW' => 2, 'defaultH' => 1, ]; } public function query_for_data( array $query_args, array $settings ) { $post = get_site_transient( 'ithemes-security-news' ); if ( false === $post ) { $response = wp_safe_remote_get( add_query_arg( [ 'categories' => [ 380, 419, 4766 ], 'per_page' => 1, 'context' => 'embed', ], 'https://solidwp.com/wp-json/wp/v2/posts' ) ); if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { $post = []; set_site_transient( 'ithemes-security-news', $post, HOUR_IN_SECONDS ); } else { $json = json_decode( wp_remote_retrieve_body( $response ), true ); if ( is_array( $json ) ) { $post = $json[0]; set_site_transient( 'ithemes-security-news', $post, DAY_IN_SECONDS ); } else { $post = []; set_site_transient( 'ithemes-security-news', $post, HOUR_IN_SECONDS ); } } } return [ 'news' => $post ? [ 'title' => html_entity_decode( $post['title']['rendered'] ), 'excerpt' => wp_strip_all_tags( html_entity_decode( $post['excerpt']['rendered'] ) ), 'date' => $post['date'], 'link' => $post['link'], ] : null, 'vulnerability' => $this->get_vulnerability(), ]; } private function get_vulnerability() { $request = new \WP_REST_Request( 'GET', '/ithemes-security/v1/site-scanner/vulnerabilities' ); $request->set_query_params( [ 'resolution' => [ '', 'patched' ] ] ); $response = rest_do_request( $request ); if ( $response->is_error() ) { return null; } $vulnerabilities = $response->get_data(); if ( ! $vulnerabilities ) { return null; } usort( $vulnerabilities, function ( $a, $b ) { return $b['details']['score'] <=> $a['details']['score']; } ); return $vulnerabilities[0]; } }