diff options
| author | Mate Bartus <mate.bartus@gmail.com> | 2015-06-26 01:02:04 +0200 |
|---|---|---|
| committer | Mate Bartus <mate.bartus@gmail.com> | 2015-06-26 01:04:36 +0200 |
| commit | b09293d5ff38633d506083cffc0a9dd2c98c15c4 (patch) | |
| tree | 33a330239989bcd84eb58d3bdf90b046a1788bac /phpBB/phpbb/di/ordered_service_collection.php | |
| parent | 050de400d741d48403fb32485933d1fe161e89b0 (diff) | |
| download | forums-b09293d5ff38633d506083cffc0a9dd2c98c15c4.tar forums-b09293d5ff38633d506083cffc0a9dd2c98c15c4.tar.gz forums-b09293d5ff38633d506083cffc0a9dd2c98c15c4.tar.bz2 forums-b09293d5ff38633d506083cffc0a9dd2c98c15c4.tar.xz forums-b09293d5ff38633d506083cffc0a9dd2c98c15c4.zip | |
[ticket/13961] Move back service_collections under original namespace
PHPBB3-13961
Diffstat (limited to 'phpBB/phpbb/di/ordered_service_collection.php')
| -rw-r--r-- | phpBB/phpbb/di/ordered_service_collection.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/phpBB/phpbb/di/ordered_service_collection.php b/phpBB/phpbb/di/ordered_service_collection.php new file mode 100644 index 0000000000..46f397a004 --- /dev/null +++ b/phpBB/phpbb/di/ordered_service_collection.php @@ -0,0 +1,121 @@ +<?php +/** + * + * This file is part of the phpBB Forum Software package. + * + * @copyright (c) phpBB Limited <https://www.phpbb.com> + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\di; + +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Collection of services in a specified order + */ +class ordered_service_collection extends service_collection +{ + /** + * @var bool + */ + protected $is_ordered; + + /** + * @var array + */ + protected $service_ids; + + /** + * Constructor + * + * @param ContainerInterface $container Container object + */ + public function __construct(ContainerInterface $container) + { + $this->is_ordered = false; + $this->service_ids = array(); + + parent::__construct($container); + } + + /** + * {@inheritdoc} + */ + public function getIterator() + { + if (!$this->is_ordered) + { + $this->sort_services(); + } + + return new service_collection_iterator($this); + } + + /** + * {@inheritdoc} + */ + public function offsetExists($index) + { + if (!$this->is_ordered) + { + $this->sort_services(); + } + + return parent::offsetExists($index); + } + + /** + * {@inheritdoc} + */ + public function offsetGet($index) + { + if (!$this->is_ordered) + { + $this->sort_services(); + } + + return parent::offsetGet($index); + } + + /** + * Adds a service ID to the collection + * + * @param string $service_id + * @param int $order + */ + public function add($service_id, $order = 0) + { + if ($this->is_ordered) + { + return; + } + + $order = (int) $order; + + $this->service_ids[$order][] = $service_id; + } + + protected function sort_services() + { + if ($this->is_ordered) + { + return; + } + + ksort($this->service_ids); + foreach ($this->service_ids as $service_order_group) + { + foreach ($service_order_group as $service_id) + { + $this->offsetSet($service_id, null); + } + } + + $this->is_ordered = true; + } +} |
