Add support for preg_replace_callback filters

to support changes needed for DTC to be moved
This commit is contained in:
Joey Kimsey
2024-08-20 06:29:08 -04:00
parent de930d00c9
commit 1d71b4fd13

View File

@ -48,7 +48,20 @@ class Filters {
} }
foreach ( self::$filters as $pattern ) { foreach ( self::$filters as $pattern ) {
if ( $pattern['enabled'] || false !== $force ) { if ( $pattern['enabled'] || false !== $force ) {
$data = trim( preg_replace( $pattern['match'], $pattern['replace'], $data ) ); if ( ! empty( $pattern['callback'] ) && is_array( $pattern['callback'] ) ) {
$result = preg_replace_callback(
$pattern['match'],
$pattern['callback'],
$data
);
} else {
$result = preg_replace(
$pattern['match'],
$pattern['replace'],
$data
);
}
$data = trim( $result );
} }
} }
return $data; return $data;
@ -59,14 +72,21 @@ class Filters {
return $data; return $data;
} }
if ( self::$filters[$name]['enabled'] || false !== $force ) { if ( self::$filters[$name]['enabled'] || false !== $force ) {
$data = trim( if ( ! empty( self::$filters[$name]['callback'] ) && is_array( self::$filters[$name]['callback'] ) ) {
preg_replace( $result = preg_replace_callback(
self::$filters[$name]['match'],
self::$filters[$name]['callback'],
$data
);
} else {
$result = preg_replace(
self::$filters[$name]['match'], self::$filters[$name]['match'],
self::$filters[$name]['replace'], self::$filters[$name]['replace'],
$data $data
)
); );
} }
$data = trim( $result );
}
return $data; return $data;
} }
@ -78,11 +98,20 @@ class Filters {
* @param {string} [$replace] * @param {string} [$replace]
* @param {bool} [$enabled] - Whether the filter should be enabled or disabled. * @param {bool} [$enabled] - Whether the filter should be enabled or disabled.
*/ */
public static function add( $filterName, $match, $replace, $enabled = false ) { public static function add( $filterName, $match, $replace, $enabled = false, $callback = false ) {
if ( isset( self::$filters[$filterName] ) ) { if ( isset( self::$filters[$filterName] ) ) {
Debug::error( "Filter already exists: $filterName" ); Debug::error( "Filter already exists: $filterName" );
return; return;
} }
if ( $callback === true ) {
self::$filters[ $filterName ] = [
'name' => $filterName,
'match' => $match,
'callback' => $replace,
'enabled' => $enabled,
];
return;
}
self::$filters[ $filterName ] = [ self::$filters[ $filterName ] = [
'name' => $filterName, 'name' => $filterName,
'match' => $match, 'match' => $match,