/vendor/zendframework/zend-filter/src/FilterPluginManager.php

https://github.com/tmccormi/openemr · PHP · 369 lines · 302 code · 17 blank · 50 comment · 2 complexity · 78a1dbb17c5d09d841043b2f7d1ae115 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. */
  9. namespace Zend\Filter;
  10. use Zend\Filter\Exception\RuntimeException;
  11. use Zend\I18n\Filter\Alnum;
  12. use Zend\I18n\Filter\Alpha;
  13. use Zend\I18n\Filter\NumberFormat;
  14. use Zend\I18n\Filter\NumberParse;
  15. use Zend\ServiceManager\AbstractPluginManager;
  16. use Zend\ServiceManager\Exception\InvalidServiceException;
  17. use Zend\ServiceManager\Factory\InvokableFactory;
  18. /**
  19. * Plugin manager implementation for the filter chain.
  20. *
  21. * Enforces that filters retrieved are either callbacks or instances of
  22. * FilterInterface. Additionally, it registers a number of default filters
  23. * available, as well as aliases for them.
  24. */
  25. class FilterPluginManager extends AbstractPluginManager
  26. {
  27. protected $aliases = [
  28. // For the future
  29. 'int' => ToInt::class,
  30. 'Int' => ToInt::class,
  31. 'null' => ToNull::class,
  32. 'Null' => ToNull::class,
  33. // I18n filters
  34. 'alnum' => Alnum::class,
  35. 'Alnum' => Alnum::class,
  36. 'alpha' => Alpha::class,
  37. 'Alpha' => Alpha::class,
  38. 'numberformat' => NumberFormat::class,
  39. 'numberFormat' => NumberFormat::class,
  40. 'NumberFormat' => NumberFormat::class,
  41. 'numberparse' => NumberParse::class,
  42. 'numberParse' => NumberParse::class,
  43. 'NumberParse' => NumberParse::class,
  44. // Standard filters
  45. 'basename' => BaseName::class,
  46. 'Basename' => BaseName::class,
  47. 'blacklist' => Blacklist::class,
  48. 'Blacklist' => Blacklist::class,
  49. 'boolean' => Boolean::class,
  50. 'Boolean' => Boolean::class,
  51. 'callback' => Callback::class,
  52. 'Callback' => Callback::class,
  53. 'compress' => Compress::class,
  54. 'Compress' => Compress::class,
  55. 'dataunitformatter' => DataUnitFormatter::class,
  56. 'dataUnitFormatter' => DataUnitFormatter::class,
  57. 'DataUnitFormatter' => DataUnitFormatter::class,
  58. 'dateselect' => DateSelect::class,
  59. 'dateSelect' => DateSelect::class,
  60. 'DateSelect' => DateSelect::class,
  61. 'datetimeformatter' => DateTimeFormatter::class,
  62. 'datetimeFormatter' => DateTimeFormatter::class,
  63. 'DatetimeFormatter' => DateTimeFormatter::class,
  64. 'dateTimeFormatter' => DateTimeFormatter::class,
  65. 'DateTimeFormatter' => DateTimeFormatter::class,
  66. 'datetimeselect' => DateTimeSelect::class,
  67. 'datetimeSelect' => DateTimeSelect::class,
  68. 'DatetimeSelect' => DateTimeSelect::class,
  69. 'dateTimeSelect' => DateTimeSelect::class,
  70. 'DateTimeSelect' => DateTimeSelect::class,
  71. 'decompress' => Decompress::class,
  72. 'Decompress' => Decompress::class,
  73. 'decrypt' => Decrypt::class,
  74. 'Decrypt' => Decrypt::class,
  75. 'digits' => Digits::class,
  76. 'Digits' => Digits::class,
  77. 'dir' => Dir::class,
  78. 'Dir' => Dir::class,
  79. 'encrypt' => Encrypt::class,
  80. 'Encrypt' => Encrypt::class,
  81. 'filedecrypt' => File\Decrypt::class,
  82. 'fileDecrypt' => File\Decrypt::class,
  83. 'FileDecrypt' => File\Decrypt::class,
  84. 'fileencrypt' => File\Encrypt::class,
  85. 'fileEncrypt' => File\Encrypt::class,
  86. 'FileEncrypt' => File\Encrypt::class,
  87. 'filelowercase' => File\LowerCase::class,
  88. 'fileLowercase' => File\LowerCase::class,
  89. 'FileLowercase' => File\LowerCase::class,
  90. 'fileLowerCase' => File\LowerCase::class,
  91. 'FileLowerCase' => File\LowerCase::class,
  92. 'filerename' => File\Rename::class,
  93. 'fileRename' => File\Rename::class,
  94. 'FileRename' => File\Rename::class,
  95. 'filerenameupload' => File\RenameUpload::class,
  96. 'fileRenameUpload' => File\RenameUpload::class,
  97. 'FileRenameUpload' => File\RenameUpload::class,
  98. 'fileuppercase' => File\UpperCase::class,
  99. 'fileUppercase' => File\UpperCase::class,
  100. 'FileUppercase' => File\UpperCase::class,
  101. 'fileUpperCase' => File\UpperCase::class,
  102. 'FileUpperCase' => File\UpperCase::class,
  103. 'htmlentities' => HtmlEntities::class,
  104. 'htmlEntities' => HtmlEntities::class,
  105. 'HtmlEntities' => HtmlEntities::class,
  106. 'inflector' => Inflector::class,
  107. 'Inflector' => Inflector::class,
  108. 'monthselect' => MonthSelect::class,
  109. 'monthSelect' => MonthSelect::class,
  110. 'MonthSelect' => MonthSelect::class,
  111. 'pregreplace' => PregReplace::class,
  112. 'pregReplace' => PregReplace::class,
  113. 'PregReplace' => PregReplace::class,
  114. 'realpath' => RealPath::class,
  115. 'realPath' => RealPath::class,
  116. 'RealPath' => RealPath::class,
  117. 'stringtolower' => StringToLower::class,
  118. 'stringToLower' => StringToLower::class,
  119. 'StringToLower' => StringToLower::class,
  120. 'stringtoupper' => StringToUpper::class,
  121. 'stringToUpper' => StringToUpper::class,
  122. 'StringToUpper' => StringToUpper::class,
  123. 'stringtrim' => StringTrim::class,
  124. 'stringTrim' => StringTrim::class,
  125. 'StringTrim' => StringTrim::class,
  126. 'stripnewlines' => StripNewlines::class,
  127. 'stripNewlines' => StripNewlines::class,
  128. 'StripNewlines' => StripNewlines::class,
  129. 'striptags' => StripTags::class,
  130. 'stripTags' => StripTags::class,
  131. 'StripTags' => StripTags::class,
  132. 'toint' => ToInt::class,
  133. 'toInt' => ToInt::class,
  134. 'ToInt' => ToInt::class,
  135. 'tonull' => ToNull::class,
  136. 'toNull' => ToNull::class,
  137. 'ToNull' => ToNull::class,
  138. 'uppercasewords' => UpperCaseWords::class,
  139. 'upperCaseWords' => UpperCaseWords::class,
  140. 'UpperCaseWords' => UpperCaseWords::class,
  141. 'urinormalize' => UriNormalize::class,
  142. 'uriNormalize' => UriNormalize::class,
  143. 'UriNormalize' => UriNormalize::class,
  144. 'whitelist' => Whitelist::class,
  145. 'Whitelist' => Whitelist::class,
  146. 'wordcamelcasetodash' => Word\CamelCaseToDash::class,
  147. 'wordCamelCaseToDash' => Word\CamelCaseToDash::class,
  148. 'WordCamelCaseToDash' => Word\CamelCaseToDash::class,
  149. 'wordcamelcasetoseparator' => Word\CamelCaseToSeparator::class,
  150. 'wordCamelCaseToSeparator' => Word\CamelCaseToSeparator::class,
  151. 'WordCamelCaseToSeparator' => Word\CamelCaseToSeparator::class,
  152. 'wordcamelcasetounderscore' => Word\CamelCaseToUnderscore::class,
  153. 'wordCamelCaseToUnderscore' => Word\CamelCaseToUnderscore::class,
  154. 'WordCamelCaseToUnderscore' => Word\CamelCaseToUnderscore::class,
  155. 'worddashtocamelcase' => Word\DashToCamelCase::class,
  156. 'wordDashToCamelCase' => Word\DashToCamelCase::class,
  157. 'WordDashToCamelCase' => Word\DashToCamelCase::class,
  158. 'worddashtoseparator' => Word\DashToSeparator::class,
  159. 'wordDashToSeparator' => Word\DashToSeparator::class,
  160. 'WordDashToSeparator' => Word\DashToSeparator::class,
  161. 'worddashtounderscore' => Word\DashToUnderscore::class,
  162. 'wordDashToUnderscore' => Word\DashToUnderscore::class,
  163. 'WordDashToUnderscore' => Word\DashToUnderscore::class,
  164. 'wordseparatortocamelcase' => Word\SeparatorToCamelCase::class,
  165. 'wordSeparatorToCamelCase' => Word\SeparatorToCamelCase::class,
  166. 'WordSeparatorToCamelCase' => Word\SeparatorToCamelCase::class,
  167. 'wordseparatortodash' => Word\SeparatorToDash::class,
  168. 'wordSeparatorToDash' => Word\SeparatorToDash::class,
  169. 'WordSeparatorToDash' => Word\SeparatorToDash::class,
  170. 'wordseparatortoseparator' => Word\SeparatorToSeparator::class,
  171. 'wordSeparatorToSeparator' => Word\SeparatorToSeparator::class,
  172. 'WordSeparatorToSeparator' => Word\SeparatorToSeparator::class,
  173. 'wordunderscoretocamelcase' => Word\UnderscoreToCamelCase::class,
  174. 'wordUnderscoreToCamelCase' => Word\UnderscoreToCamelCase::class,
  175. 'WordUnderscoreToCamelCase' => Word\UnderscoreToCamelCase::class,
  176. 'wordunderscoretostudlycase' => Word\UnderscoreToStudlyCase::class,
  177. 'wordUnderscoreToStudlyCase' => Word\UnderscoreToStudlyCase::class,
  178. 'WordUnderscoreToStudlyCase' => Word\UnderscoreToStudlyCase::class,
  179. 'wordunderscoretodash' => Word\UnderscoreToDash::class,
  180. 'wordUnderscoreToDash' => Word\UnderscoreToDash::class,
  181. 'WordUnderscoreToDash' => Word\UnderscoreToDash::class,
  182. 'wordunderscoretoseparator' => Word\UnderscoreToSeparator::class,
  183. 'wordUnderscoreToSeparator' => Word\UnderscoreToSeparator::class,
  184. 'WordUnderscoreToSeparator' => Word\UnderscoreToSeparator::class,
  185. ];
  186. /**
  187. * Default set of plugins factories
  188. *
  189. * @var array
  190. */
  191. protected $factories = [
  192. // I18n filters
  193. Alnum::class => InvokableFactory::class,
  194. Alpha::class => InvokableFactory::class,
  195. NumberFormat::class => InvokableFactory::class,
  196. NumberParse::class => InvokableFactory::class,
  197. // Standard filters
  198. BaseName::class => InvokableFactory::class,
  199. Blacklist::class => InvokableFactory::class,
  200. Boolean::class => InvokableFactory::class,
  201. Callback::class => InvokableFactory::class,
  202. Compress::class => InvokableFactory::class,
  203. DataUnitFormatter::class => InvokableFactory::class,
  204. DateSelect::class => InvokableFactory::class,
  205. DateTimeFormatter::class => InvokableFactory::class,
  206. DateTimeSelect::class => InvokableFactory::class,
  207. Decompress::class => InvokableFactory::class,
  208. Decrypt::class => InvokableFactory::class,
  209. Digits::class => InvokableFactory::class,
  210. Dir::class => InvokableFactory::class,
  211. Encrypt::class => InvokableFactory::class,
  212. File\Decrypt::class => InvokableFactory::class,
  213. File\Encrypt::class => InvokableFactory::class,
  214. File\LowerCase::class => InvokableFactory::class,
  215. File\Rename::class => InvokableFactory::class,
  216. File\RenameUpload::class => InvokableFactory::class,
  217. File\UpperCase::class => InvokableFactory::class,
  218. HtmlEntities::class => InvokableFactory::class,
  219. Inflector::class => InvokableFactory::class,
  220. ToInt::class => InvokableFactory::class,
  221. MonthSelect::class => InvokableFactory::class,
  222. ToNull::class => InvokableFactory::class,
  223. UpperCaseWords::class => InvokableFactory::class,
  224. PregReplace::class => InvokableFactory::class,
  225. RealPath::class => InvokableFactory::class,
  226. StringToLower::class => InvokableFactory::class,
  227. StringToUpper::class => InvokableFactory::class,
  228. StringTrim::class => InvokableFactory::class,
  229. StripNewlines::class => InvokableFactory::class,
  230. StripTags::class => InvokableFactory::class,
  231. ToInt::class => InvokableFactory::class,
  232. ToNull::class => InvokableFactory::class,
  233. UriNormalize::class => InvokableFactory::class,
  234. Whitelist::class => InvokableFactory::class,
  235. Word\CamelCaseToDash::class => InvokableFactory::class,
  236. Word\CamelCaseToSeparator::class => InvokableFactory::class,
  237. Word\CamelCaseToUnderscore::class => InvokableFactory::class,
  238. Word\DashToCamelCase::class => InvokableFactory::class,
  239. Word\DashToSeparator::class => InvokableFactory::class,
  240. Word\DashToUnderscore::class => InvokableFactory::class,
  241. Word\SeparatorToCamelCase::class => InvokableFactory::class,
  242. Word\SeparatorToDash::class => InvokableFactory::class,
  243. Word\SeparatorToSeparator::class => Word\Service\SeparatorToSeparatorFactory::class,
  244. Word\UnderscoreToCamelCase::class => InvokableFactory::class,
  245. Word\UnderscoreToStudlyCase::class => InvokableFactory::class,
  246. Word\UnderscoreToDash::class => InvokableFactory::class,
  247. Word\UnderscoreToSeparator::class => InvokableFactory::class,
  248. // v2 canonical FQCNs
  249. 'zendfiltertoint' => InvokableFactory::class,
  250. 'zendfiltertonull' => InvokableFactory::class,
  251. 'zendi18nfilteralnum' => InvokableFactory::class,
  252. 'zendi18nfilteralpha' => InvokableFactory::class,
  253. 'zendi18nfilternumberformat' => InvokableFactory::class,
  254. 'zendi18nfilternumberparse' => InvokableFactory::class,
  255. 'zendfilterbasename' => InvokableFactory::class,
  256. 'zendfilterblacklist' => InvokableFactory::class,
  257. 'zendfilterboolean' => InvokableFactory::class,
  258. 'zendfiltercallback' => InvokableFactory::class,
  259. 'zendfiltercompress' => InvokableFactory::class,
  260. 'zendfilterdataunitformatter' => InvokableFactory::class,
  261. 'zendfilterdateselect' => InvokableFactory::class,
  262. 'zendfilterdatetimeformatter' => InvokableFactory::class,
  263. 'zendfilterdatetimeselect' => InvokableFactory::class,
  264. 'zendfilterdecompress' => InvokableFactory::class,
  265. 'zendfilterdecrypt' => InvokableFactory::class,
  266. 'zendfilterdigits' => InvokableFactory::class,
  267. 'zendfilterdir' => InvokableFactory::class,
  268. 'zendfilterencrypt' => InvokableFactory::class,
  269. 'zendfilterfiledecrypt' => InvokableFactory::class,
  270. 'zendfilterfileencrypt' => InvokableFactory::class,
  271. 'zendfilterfilelowercase' => InvokableFactory::class,
  272. 'zendfilterfilerename' => InvokableFactory::class,
  273. 'zendfilterfilerenameupload' => InvokableFactory::class,
  274. 'zendfilterfileuppercase' => InvokableFactory::class,
  275. 'zendfilterhtmlentities' => InvokableFactory::class,
  276. 'zendfilterinflector' => InvokableFactory::class,
  277. 'zendfiltermonthselect' => InvokableFactory::class,
  278. 'zendfilterpregreplace' => InvokableFactory::class,
  279. 'zendfilterrealpath' => InvokableFactory::class,
  280. 'zendfilterstringtolower' => InvokableFactory::class,
  281. 'zendfilterstringtoupper' => InvokableFactory::class,
  282. 'zendfilterstringtrim' => InvokableFactory::class,
  283. 'zendfilterstripnewlines' => InvokableFactory::class,
  284. 'zendfilterstriptags' => InvokableFactory::class,
  285. 'zendfilteruppercasewords' => InvokableFactory::class,
  286. 'zendfilterurinormalize' => InvokableFactory::class,
  287. 'zendfilterwhitelist' => InvokableFactory::class,
  288. 'zendfilterwordcamelcasetodash' => InvokableFactory::class,
  289. 'zendfilterwordcamelcasetoseparator' => InvokableFactory::class,
  290. 'zendfilterwordcamelcasetounderscore' => InvokableFactory::class,
  291. 'zendfilterworddashtocamelcase' => InvokableFactory::class,
  292. 'zendfilterworddashtoseparator' => InvokableFactory::class,
  293. 'zendfilterworddashtounderscore' => InvokableFactory::class,
  294. 'zendfilterwordseparatortocamelcase' => InvokableFactory::class,
  295. 'zendfilterwordseparatortodash' => InvokableFactory::class,
  296. 'zendfilterwordseparatortoseparator' => Word\Service\SeparatorToSeparatorFactory::class,
  297. 'zendfilterwordunderscoretocamelcase' => InvokableFactory::class,
  298. 'zendfilterwordunderscoretostudlycase' => InvokableFactory::class,
  299. 'zendfilterwordunderscoretodash' => InvokableFactory::class,
  300. 'zendfilterwordunderscoretoseparator' => InvokableFactory::class,
  301. ];
  302. protected $instanceOf = FilterInterface::class;
  303. /**
  304. * Whether or not to share by default; default to false (v2)
  305. *
  306. * @var bool
  307. */
  308. protected $shareByDefault = false;
  309. /**
  310. * Whether or not to share by default; default to false (v3)
  311. *
  312. * @var bool
  313. */
  314. protected $sharedByDefault = false;
  315. /**
  316. * {@inheritdoc}
  317. */
  318. public function validate($plugin)
  319. {
  320. if ($plugin instanceof $this->instanceOf) {
  321. // we're okay
  322. return;
  323. }
  324. if (is_callable($plugin)) {
  325. // also okay
  326. return;
  327. }
  328. throw new InvalidServiceException(sprintf(
  329. 'Plugin of type %s is invalid; must implement %s\FilterInterface or be callable',
  330. (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
  331. __NAMESPACE__
  332. ));
  333. }
  334. /**
  335. * Validate the plugin (v2)
  336. *
  337. * Checks that the filter loaded is either a valid callback or an instance
  338. * of FilterInterface.
  339. *
  340. * @param mixed $plugin
  341. * @return void
  342. * @throws Exception\RuntimeException if invalid
  343. */
  344. public function validatePlugin($plugin)
  345. {
  346. try {
  347. $this->validate($plugin);
  348. } catch (InvalidServiceException $e) {
  349. throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
  350. }
  351. }
  352. }