1<?php 2namespace TYPO3\CMS\Extensionmanager\Utility\Parser; 3 4/* 5 * This file is part of the TYPO3 CMS project. 6 * 7 * It is free software; you can redistribute it and/or modify it under 8 * the terms of the GNU General Public License, either version 2 9 * of the License, or any later version. 10 * 11 * For the full copyright and license information, please read the 12 * LICENSE.txt file that was distributed with this source code. 13 * 14 * The TYPO3 project - inspiring people to share! 15 */ 16 17/** 18 * Factory for XML parsers. 19 * @internal This class is a specific ExtensionManager implementation and is not part of the Public TYPO3 API. 20 */ 21class XmlParserFactory 22{ 23 /** 24 * An array with instances of xml parsers. 25 * This member is set in the getParserInstance() function. 26 * 27 * @var array 28 */ 29 protected static $instance = []; 30 31 /** 32 * Keeps array of all available parsers. 33 * 34 * @todo This would better be moved to a global configuration array like 35 * $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']. (might require EM to be moved in a sysext) 36 * 37 * @var array 38 */ 39 protected static $parsers = [ 40 'extension' => [ 41 \TYPO3\CMS\Extensionmanager\Utility\Parser\ExtensionXmlPushParser::class => 'ExtensionXmlPushParser.php', 42 \TYPO3\CMS\Extensionmanager\Utility\Parser\ExtensionXmlPullParser::class => 'ExtensionXmlPullParser.php', 43 ], 44 'mirror' => [ 45 \TYPO3\CMS\Extensionmanager\Utility\Parser\MirrorXmlPushParser::class => 'MirrorXmlPushParser.php', 46 \TYPO3\CMS\Extensionmanager\Utility\Parser\MirrorXmlPullParser::class=> 'MirrorXmlPullParser.php', 47 ] 48 ]; 49 50 /** 51 * Obtains a xml parser instance. 52 * 53 * This function will return an instance of a class that implements 54 * \TYPO3\CMS\Extensionmanager\Utility\Parser\AbstractExtensionXmlParser 55 * 56 * @param string $parserType type of parser, one of extension and mirror 57 * @param string $excludeClassNames (optional) comma-separated list of class names 58 * @return \TYPO3\CMS\Extensionmanager\Utility\Parser\AbstractExtensionXmlParser an instance of an extension.xml parser 59 */ 60 public static function getParserInstance($parserType, $excludeClassNames = '') 61 { 62 if (!isset(self::$instance[$parserType]) || !is_object(self::$instance[$parserType]) || !empty($excludeClassNames)) { 63 // reset instance 64 self::$instance[$parserType] = ($objParser = null); 65 foreach (self::$parsers[$parserType] as $className => $file) { 66 if (!\TYPO3\CMS\Core\Utility\GeneralUtility::inList($excludeClassNames, $className)) { 67 $objParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($className); 68 if ($objParser->isAvailable()) { 69 self::$instance[$parserType] = &$objParser; 70 break; 71 } 72 $objParser = null; 73 } 74 } 75 } 76 return self::$instance[$parserType]; 77 } 78} 79