mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-24 12:03:21 +01:00
* igorw/ticket/11199: [ticket/11199] Match cache purge container files against container_* [ticket/11199] Purge dumped container correctly on cache purge.
143 lines
4.2 KiB
PHP
143 lines
4.2 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* @package phpBB3
|
|
* @copyright (c) 2005 phpBB Group
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
|
*
|
|
*/
|
|
|
|
use Symfony\Component\Config\FileLocator;
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
|
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
if (!defined('IN_PHPBB'))
|
|
{
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Create the ContainerBuilder object
|
|
*
|
|
* @param array $extensions Array of Container extension objects
|
|
* @param string $phpbb_root_path Root path
|
|
* @param string $php_ext PHP Extension
|
|
* @return ContainerBuilder object
|
|
*/
|
|
function phpbb_create_container(array $extensions, $phpbb_root_path, $php_ext)
|
|
{
|
|
$container = new ContainerBuilder();
|
|
|
|
foreach ($extensions as $extension)
|
|
{
|
|
$container->registerExtension($extension);
|
|
$container->loadFromExtension($extension->getAlias());
|
|
}
|
|
|
|
$container->setParameter('core.root_path', $phpbb_root_path);
|
|
$container->setParameter('core.php_ext', $php_ext);
|
|
|
|
return $container;
|
|
}
|
|
|
|
/**
|
|
* Create installer container
|
|
*
|
|
* @param string $phpbb_root_path Root path
|
|
* @param string $php_ext PHP Extension
|
|
* @return ContainerBuilder object
|
|
*/
|
|
function phpbb_create_install_container($phpbb_root_path, $php_ext)
|
|
{
|
|
$core = new phpbb_di_extension_core($phpbb_root_path);
|
|
$container = phpbb_create_container(array($core), $phpbb_root_path, $php_ext);
|
|
|
|
$container->setParameter('core.root_path', $phpbb_root_path);
|
|
$container->setParameter('core.php_ext', $php_ext);
|
|
$container->setParameter('core.table_prefix', '');
|
|
|
|
$container->register('dbal.conn')->setSynthetic(true);
|
|
|
|
$container->setAlias('cache.driver', 'cache.driver.install');
|
|
|
|
$container->compile();
|
|
|
|
return $container;
|
|
}
|
|
|
|
/**
|
|
* Create a compiled ContainerBuilder object
|
|
*
|
|
* @param array $extensions Array of Container extension objects
|
|
* @param array $passes Array of Compiler Pass objects
|
|
* @param string $phpbb_root_path Root path
|
|
* @param string $php_ext PHP Extension
|
|
* @return ContainerBuilder object (compiled)
|
|
*/
|
|
function phpbb_create_compiled_container(array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
|
{
|
|
// Create a temporary container for access to the ext.manager service
|
|
$tmp_container = phpbb_create_container($extensions, $phpbb_root_path, $php_ext);
|
|
$tmp_container->compile();
|
|
|
|
// XXX stop writing to global $cache when
|
|
// http://tracker.phpbb.com/browse/PHPBB3-11203 is fixed
|
|
$GLOBALS['cache'] = $tmp_container->get('cache');
|
|
$installed_exts = $tmp_container->get('ext.manager')->all_enabled();
|
|
|
|
// Now pass the enabled extension paths into the ext compiler extension
|
|
$extensions[] = new phpbb_di_extension_ext($installed_exts);
|
|
|
|
// Create the final container to be compiled and cached
|
|
$container = phpbb_create_container($extensions, $phpbb_root_path, $php_ext);
|
|
|
|
// Compile the container
|
|
foreach ($passes as $pass)
|
|
{
|
|
$container->addCompilerPass($pass);
|
|
}
|
|
$container->compile();
|
|
|
|
return $container;
|
|
}
|
|
|
|
function phpbb_create_dumped_container(array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
|
{
|
|
// Check for our cached container; if it exists, use it
|
|
$container_filename = phpbb_container_filename($phpbb_root_path, $php_ext);
|
|
if (file_exists($container_filename))
|
|
{
|
|
require($container_filename);
|
|
return new phpbb_cache_container();
|
|
}
|
|
|
|
$container = phpbb_create_compiled_container($extensions, $passes, $phpbb_root_path, $php_ext);
|
|
|
|
// Lastly, we create our cached container class
|
|
$dumper = new PhpDumper($container);
|
|
$cached_container_dump = $dumper->dump(array(
|
|
'class' => 'phpbb_cache_container',
|
|
'base_class' => 'Symfony\\Component\\DependencyInjection\\ContainerBuilder',
|
|
));
|
|
|
|
file_put_contents($container_filename, $cached_container_dump);
|
|
|
|
return $container;
|
|
}
|
|
|
|
function phpbb_create_dumped_container_unless_debug(array $extensions, array $passes, $phpbb_root_path, $php_ext)
|
|
{
|
|
$container_factory = defined('DEBUG') ? 'phpbb_create_compiled_container' : 'phpbb_create_dumped_container';
|
|
return $container_factory($extensions, $passes, $phpbb_root_path, $php_ext);
|
|
}
|
|
|
|
function phpbb_container_filename($phpbb_root_path, $php_ext)
|
|
{
|
|
$filename = str_replace(array('/', '.'), array('slash', 'dot'), $phpbb_root_path);
|
|
return $phpbb_root_path . 'cache/container_' . $filename . '.' . $php_ext;
|
|
}
|