. namespace core\output\progress_trace; use core\output\progress_trace; /** * Special type of trace that can be used for catching of output of other traces. * * @copyright Petr Skoda {@link http://skodak.org} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @package core */ class progress_trace_buffer extends progress_trace { /** @var string output buffer */ protected string $buffer = ''; /** * Constructor. * * @param progress_trace $trace * @param bool $passthrough true means output and buffer, false means just buffer and no output */ public function __construct( /** @var progress_trace The progress_trace to pass content to */ protected progress_trace $trace, /** @var bool Whether we pass output out */ protected bool $passthrough = true, ) { $this->buffer = ''; } #[\Override] public function output( string $message, int $depth = 0, ): void { ob_start(); $this->trace->output($message, $depth); $this->buffer .= ob_get_contents(); if ($this->passthrough) { ob_end_flush(); } else { ob_end_clean(); } } #[\Override] public function finished(): void { ob_start(); $this->trace->finished(); $this->buffer .= ob_get_contents(); if ($this->passthrough) { ob_end_flush(); } else { ob_end_clean(); } } /** * Reset the internal text buffer. */ public function reset_buffer(): void { $this->buffer = ''; } /** * Return the internal text buffer. * * @return string buffered plain text */ public function get_buffer(): string { return $this->buffer; } } // Alias this class to the old name. // This file will be autoloaded by the legacyclasses autoload system. // In future all uses of this class will be corrected and the legacy references will be removed. class_alias(progress_trace_buffer::class, \progress_trace_buffer::class);