>}|null */ public function get_results(): ?array { $results = get_transient( self::RESULTS_TRANSIENT ); if ( ! is_array( $results ) || ! isset( $results['plugins'] ) || ! is_array( $results['plugins'] ) ) { return null; } return $results; } /** * Result for one plugin file, if any. * * @param string $plugin_file Plugin basename. * @return array|null */ public function get_plugin_result( string $plugin_file ): ?array { $results = $this->get_results(); return $results['plugins'][ $plugin_file ] ?? null; } /** * Stores finished results for 24 hours. * * @param array $results Results. */ public function save_results( array $results ): void { set_transient( self::RESULTS_TRANSIENT, $results, DAY_IN_SECONDS ); } /** * Current scan state or null if no scan is running. * * @return array|null */ public function get_scan(): ?array { $scan = get_option( self::SCAN_OPTION, null ); return is_array( $scan ) ? $scan : null; } /** * Saves scan progress (not autoloaded). * * @param array $scan Scan state. */ public function save_scan( array $scan ): void { update_option( self::SCAN_OPTION, $scan, false ); } /** * Removes the scan state. */ public function clear_scan(): void { delete_option( self::SCAN_OPTION ); } /** * Last connection error. * * @return array{time: int, message: string}|null */ public function get_error(): ?array { $error = get_option( self::ERROR_OPTION, null ); return is_array( $error ) ? $error : null; } /** * Remembers a connection error. * * @param string $message Technical error message. * @param int $time Timestamp. */ public function save_error( string $message, int $time ): void { update_option( self::ERROR_OPTION, array( 'time' => $time, 'message' => $message, ), false ); } /** * Forgets the last connection error. */ public function clear_error(): void { delete_option( self::ERROR_OPTION ); } /** * Deletes results, scan progress, the last error and all dismissals. */ public function clear(): void { delete_transient( self::RESULTS_TRANSIENT ); $this->clear_scan(); $this->clear_error(); delete_metadata( 'user', 0, self::DISMISS_META, '', true ); } }