register_classes( [ self::class ] ); } ); } public function descriptor(): array { return [ 'id' => 'block-patterns-cache', 'label' => __( 'Cached pattern library', 'templately' ), 'group' => 'cache', 'scope' => 'both', 'retention_kind' => RetentionKind::INTRINSIC, 'destructive' => true, 'schedulable' => false, ]; } public function estimate( Context $context ): TaskResult { return $this->clear( $context->with_dry_run( true ) ); } public function run( Context $context ): TaskResult { return $this->clear( $context ); } private function clear( Context $context ): TaskResult { $sync = PatternSync::get_instance(); $dir = $sync->content_dir(); $result = TaskResult::empty(); $files = glob( rtrim( $dir, '/\\' ) . '/*.php' ); foreach ( (array) $files as $file ) { if ( 'index' === basename( $file, '.php' ) ) { // The directory's own guard file — never a candidate. continue; } $outcome = Remover::delete_file( $file, $context ); if ( $outcome instanceof WP_Error ) { $result->fail( sprintf( '%s: %s', basename( $file ), $outcome->get_error_message() ) ); continue; } $result->merge( $outcome ); } if ( ! $context->is_dry_run() ) { $sync->invalidate_all(); } return $result; } }