1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-17 04:51:35 +02:00
php-phpbb/phpBB/phpbb/di/pass/markpublic_pass.php
2021-02-25 07:26:44 +07:00

59 lines
1.6 KiB
PHP

<?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\pass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
/**
* Marks all services public
*/
class markpublic_pass implements CompilerPassInterface
{
/**
* Modify the container before it is passed to the rest of the code
* Mark services as public by default unless they were explicitly marked as private
*
* @param ContainerBuilder $container ContainerBuilder object
* @return void
*/
public function process(ContainerBuilder $container)
{
$service_definitions = $container->getDefinitions();
foreach ($service_definitions as $definition)
{
$changes = $definition->getChanges();
/* Check if service definition contains explicit 'public' key (changed default state)
* If it does and the service is private, then service was explicitly marked as private
* Don't mark it as public then
*/
$definition_override_public = isset($changes['public']) && $changes['public'];
if (!$definition_override_public && $definition->isPrivate())
{
$definition->setPublic(true);
}
}
foreach ($container->getAliases() as $alias)
{
// Only mark alias as public if original service is public too
if ($service_definitions[(string) $alias]->isPublic() && $alias->isPrivate())
{
$alias->setPublic(true);
}
}
}
}