params; $url = property_exists( $params, 'url' ) ? $params->url : null; $site_id = property_exists( $params, 'site_id' ) ? intval( $params->site_id ) : null; if ( $site_id !== Utilities::site_id() ) { Utilities::log( 'BLC_SET_SCAN_DATA_ERROR - Exiting because BLC HUB API ping does not contain site id.' ); return false; } $input = $this->get_formatted_input( $params ); $use_subsite_id = false; if ( empty( $input ) ) { return false; } if ( is_multisite() ) { $subside_id = Utilities::subsite_id_from_url( $url ); if ( ! empty( $subside_id ) ) { $use_subsite_id = true; switch_to_blog( $subside_id ); } } Settings::instance()->init(); Settings::instance()->set( array( 'scan_results' => $input ) ); Settings::instance()->set( array( 'scan_status' => 'completed' ) ); Settings::instance()->save(); if ( $use_subsite_id ) { restore_current_blog(); } return true; } /** * Returns an array of expected scan data values. * * @param stdClass $params The input object. * * @return array|null */ public function get_formatted_input( stdClass $params ) { //if ( ! empty( $params->scanning->is_running ) ) { // Utilities::log( 'BLC_SET_SCAN_DATA_ERROR - Exiting because BLC HUB API scan is running currently.' ); // return null; //} $results = $params->last_result; return array( 'broken_links_list' => $this->limit_links_number( $results->broken_links ), 'broken_links' => $results->num_broken_links ?? null, 'succeeded_urls' => $results->num_successful_links ?? null, 'total_urls' => $results->num_found_links ?? null, 'unique_urls' => $results->num_site_unique_links ?? null, 'start_time' => $results->start_unix_time_utc ?? null, 'end_time' => $results->ended_unix_time_utc ?? null, 'duration' => $results->scan_duration ?? null, ); } /** * Limits the number of links to be stored in db. Limit is set to 20. * * @param array $links_list An array with all broken links sent from Hub API. * * @return array|null */ public function limit_links_number( array $links_list = array() ) { if ( empty( $links_list ) ) { return null; } $links_limit = apply_filters( 'wpmudev_blc_settings_links_limit', 20, $links_list, $this ); /* * Make sure we don't store ignored ones, whatever the length of the list. * Filtering only the lists longer than the limit used to let ignored links * reach the report email, which counts them and then leaves them out of * the table it lists. */ $new_links_list = array(); foreach ( $links_list as $broken_link ) { if ( is_object( $broken_link ) && ! empty( $broken_link->is_ignored ) ) { continue; } if ( is_array( $broken_link ) && ! empty( $broken_link['is_ignored'] ) ) { continue; } $new_links_list[] = $broken_link; } return array_slice( $new_links_list, 0, $links_limit ); } }