wpmudev = $wpmudev; $this->scan = $scan; $this->settings = $scan_settings; } /** * Gather core files & content files. * * @return bool */ public function gather_info(): bool { $timer = new Timer(); $model = $this->scan; $need_to_run = empty( $model->task_checkpoint ) ? 'get_core_files' : 'get_content_files'; if ( 'get_core_files' === $need_to_run ) { if ( $this->settings->integrity_check && $this->settings->check_core ) { $this->get_core_files(); } $model->calculate_percent( 50, 1 ); } else { $this->get_content_files(); $model->calculate_percent( 100, 1 ); } $this->log( sprintf( '%s in %d', $need_to_run, $timer->get_difference() ), Scan_Controller::SCAN_LOG ); $model->task_checkpoint = $need_to_run; $model->save(); return 'get_content_files' === $need_to_run; } /** * Get core files and update the cache. * * @return array The array of core files. */ private function get_core_files(): array { $cache = get_site_option( self::CACHE_CORE, false ); if ( is_array( $cache ) ) { return $cache; } $abs_path = defender_replace_line( ABSPATH ); $core = new File( $abs_path, true, false, array( 'dir' => array( $abs_path . 'wp-admin', $abs_path . WPINC, ), ), array(), true, true, $this->settings->filesize ); $outside = new File( $abs_path, true, true, array(), array( 'dir' => array( $abs_path . 'wp-content' . DIRECTORY_SEPARATOR, $abs_path . 'wp-admin', $abs_path . WPINC, ), 'filename' => array( 'wp-config.php', ), ), false, true, $this->settings->filesize ); $files = array_merge( $core->get_dir_tree(), $outside->get_dir_tree() ); $files = array_filter( $files ); $this->log( sprintf( 'Core: %s', count( $files ) ), Scan_Controller::SCAN_LOG ); update_site_option( self::CACHE_CORE, $files ); return $files; } /** * Get various content files starting from the root and update the cache. * * @return array|void The array of content files if cache exists, or void if no files in cache. */ private function get_content_files() { $cache = get_site_option( self::CACHE_CONTENT, false ); if ( is_array( $cache ) ) { return $cache; } $content = new File( defender_replace_line( ABSPATH ), true, false, array( 'ext' => array( 'php' ), ), array(), true, true, $this->settings->filesize ); $files = $content->get_dir_tree(); $files = array_filter( $files ); $files[] = defender_wp_config_path(); $this->log( sprintf( 'Content: %s', count( $files ) ), Scan_Controller::SCAN_LOG ); update_site_option( self::CACHE_CONTENT, $files ); } }