@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 89 lines 2.1 kB view raw
1<?php 2 3namespace PhpMimeMailParser; 4 5use PhpMimeMailParser\Contracts\MiddleWare as MiddleWareContracts; 6 7/** 8 * A stack of middleware chained together by (MiddlewareStack $next) 9 */ 10class MiddlewareStack 11{ 12 /** 13 * Next MiddlewareStack in chain 14 * 15 * @var MiddlewareStack 16 */ 17 protected $next; 18 19 /** 20 * Middleware in this MiddlewareStack 21 * 22 * @var Middleware 23 */ 24 protected $middleware; 25 26 /** 27 * Construct the first middleware in this MiddlewareStack 28 * The next middleware is chained through $MiddlewareStack->add($Middleware) 29 * 30 * @param Middleware $middleware 31 */ 32 public function __construct(?MiddleWareContracts $middleware = null) 33 { 34 $this->middleware = $middleware; 35 } 36 37 /** 38 * Creates a chained middleware in MiddlewareStack 39 * 40 * @param Middleware $middleware 41 * @return MiddlewareStack Immutable MiddlewareStack 42 */ 43 public function add(MiddleWareContracts $middleware) 44 { 45 $stack = new static($middleware); 46 $stack->next = $this; 47 return $stack; 48 } 49 50 /** 51 * Parses the MimePart by passing it through the Middleware 52 * @param MimePart $part 53 * @return MimePart 54 */ 55 public function parse(MimePart $part) 56 { 57 if (!$this->middleware) { 58 return $part; 59 } 60 $part = call_user_func(array($this->middleware, 'parse'), $part, $this->next); 61 return $part; 62 } 63 64 /** 65 * Creates a MiddlewareStack based on an array of middleware 66 * 67 * @param Middleware[] $middlewares 68 * @return MiddlewareStack 69 */ 70 public static function factory(array $middlewares = array()) 71 { 72 $stack = new static; 73 foreach ($middlewares as $middleware) { 74 $stack = $stack->add($middleware); 75 } 76 return $stack; 77 } 78 79 /** 80 * Allow calling MiddlewareStack instance directly to invoke parse() 81 * 82 * @param MimePart $part 83 * @return MimePart 84 */ 85 public function __invoke(MimePart $part) 86 { 87 return $this->parse($part); 88 } 89}