<?php class WPCF7_Pipe { public $before = ''; public $after = ''; public function __construct($text) { $text = (string) $text; $pipe_pos = strpos($text, '|'); if (false === $pipe_pos) { $this->before = $this->after = trim($text); } else { $this->before = trim(substr($text, 0, $pipe_pos)); $this->after = trim(substr($text, $pipe_pos + 1)); } } } class WPCF7_Pipes { private $pipes = array(); public function __construct(array $texts) { foreach ($texts as $text) { $this->add_pipe($text); } } private function add_pipe($text) { $pipe = new WPCF7_Pipe($text); $this->pipes[] = $pipe; } public function do_pipe($input) { $input_canonical = wpcf7_canonicalize($input, array('strto' => 'as-is')); foreach ($this->pipes as $pipe) { list($before, $after) = array_map(function ($item) { return wpcf7_canonicalize($item, array('strto' => 'as-is')); }, array($pipe->before, $pipe->after)); if ($input_canonical === $before) { return $after; } } return $input; } public function collect_befores() { $befores = array(); foreach ($this->pipes as $pipe) { $befores[] = $pipe->before; } return $befores; } public function collect_afters() { $afters = array(); foreach ($this->pipes as $pipe) { $afters[] = $pipe->after; } return $afters; } public function zero() { return empty($this->pipes); } public function random_pipe() { if ($this->zero()) { return null; } return $this->pipes[array_rand($this->pipes)]; } public function to_array() { return array_map(function (WPCF7_Pipe $pipe) { return array($pipe->before, $pipe->after); }, $this->pipes); } }