Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,105 @@ +<?php + +namespace Drupal\Component\Bridge; + +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Zend\Feed\Reader\ExtensionManagerInterface as ReaderManagerInterface; +use Zend\Feed\Writer\ExtensionManagerInterface as WriterManagerInterface; + +/** + * Defines a bridge between the ZF2 service manager to Symfony container. + */ +class ZfExtensionManagerSfContainer implements ReaderManagerInterface, WriterManagerInterface, ContainerAwareInterface { + + /** + * This property was based from Zend Framework (http://framework.zend.com/) + * + * @link http://github.com/zendframework/zf2 for the canonical source repository + * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * + * A map of characters to be replaced through strtr. + * + * @var array + * + * @see \Drupal\Component\Bridge\ZfExtensionManagerSfContainer::canonicalizeName(). + */ + protected $canonicalNamesReplacements = ['-' => '', '_' => '', ' ' => '', '\\' => '', '/' => '']; + + /** + * The prefix to be used when retrieving plugins from the container. + * + * @var string + */ + protected $prefix = ''; + + /** + * The service container. + * + * @var \Symfony\Component\DependencyInjection\ContainerInterface + */ + protected $container; + + /** + * A local cache of computed canonical names. + * + * @var string[] + */ + protected $canonicalNames; + + /** + * Constructs a ZfExtensionManagerSfContainer object. + * + * @param string $prefix + * The prefix to be used when retrieving plugins from the container. + */ + public function __construct($prefix = '') { + $this->prefix = $prefix; + } + + /** + * {@inheritdoc} + */ + public function get($extension) { + return $this->container->get($this->prefix . $this->canonicalizeName($extension)); + } + + /** + * {@inheritdoc} + */ + public function has($extension) { + return $this->container->has($this->prefix . $this->canonicalizeName($extension)); + } + + /** + * This method was based from Zend Framework (http://framework.zend.com/) + * + * @link http://github.com/zendframework/zf2 for the canonical source repository + * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * + * Canonicalize the extension name to a service name. + * + * @param string $name + * The extension name. + * + * @return string + * The service name, without the prefix. + */ + protected function canonicalizeName($name) { + if (isset($this->canonicalNames[$name])) { + return $this->canonicalNames[$name]; + } + // This is just for performance instead of using str_replace(). + return $this->canonicalNames[$name] = strtolower(strtr($name, $this->canonicalNamesReplacements)); + } + + /** + * {@inheritdoc} + */ + public function setContainer(ContainerInterface $container = NULL) { + $this->container = $container; + } + +}