Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 120
create_config_file
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
272
0.00% covered (danger)
0.00%
0 / 120
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 20
 run
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 44
 get_config_data
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 50
 get_step_count
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 get_task_lang_name
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
<?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\install\module\install_filesystem\task;
use phpbb\install\exception\user_interaction_required_exception;
/**
 * Dumps config file
 */
class create_config_file extends \phpbb\install\task_base
{
    /**
     * @var \phpbb\filesystem\filesystem_interface
     */
    protected $filesystem;
    /**
     * @var \phpbb\install\helper\database
     */
    protected $db_helper;
    /**
     * @var \phpbb\install\helper\config
     */
    protected $install_config;
    /**
     * @var \phpbb\install\helper\iohandler\iohandler_interface
     */
    protected $iohandler;
    /**
     * @var string
     */
    protected $phpbb_root_path;
    /**
     * @var string
     */
    protected $php_ext;
    /**
     * @var array
     */
    protected $options;
    /**
     * Constructor
     *
     * @param \phpbb\filesystem\filesystem_interface                $filesystem
     * @param \phpbb\install\helper\config                            $install_config
     * @param \phpbb\install\helper\database                        $db_helper
     * @param \phpbb\install\helper\iohandler\iohandler_interface    $iohandler
     * @param string                                                $phpbb_root_path
     * @param string                                                $php_ext
     * @param array                                                    $options
     */
    public function __construct(\phpbb\filesystem\filesystem_interface $filesystem,
                                \phpbb\install\helper\config $install_config,
                                \phpbb\install\helper\database $db_helper,
                                \phpbb\install\helper\iohandler\iohandler_interface $iohandler,
                                $phpbb_root_path,
                                $php_ext,
                                $options = array())
    {
        $this->install_config    = $install_config;
        $this->db_helper        = $db_helper;
        $this->filesystem        = $filesystem;
        $this->iohandler        = $iohandler;
        $this->phpbb_root_path    = $phpbb_root_path;
        $this->php_ext            = $php_ext;
        $this->options            = array_merge(array(
            'debug' => false,
            'debug_container' => false,
            'environment' => null,
        ), $options);
        parent::__construct(true);
    }
    /**
     * {@inheritdoc}
     */
    public function run()
    {
        $config_written = true;
        // Create config.php
        $path_to_config = $this->phpbb_root_path . 'config.' . $this->php_ext;
        $fp = @fopen($path_to_config, 'w');
        if (!$fp)
        {
            $config_written = false;
        }
        $config_content = $this->get_config_data($this->options['debug'], $this->options['debug_container'], $this->options['environment']);
        if (!@fwrite($fp, $config_content))
        {
            $config_written = false;
        }
        @fclose($fp);
        // chmod config.php to be only readable
        if ($config_written)
        {
            try
            {
                $this->filesystem->phpbb_chmod($path_to_config, \phpbb\filesystem\filesystem_interface::CHMOD_READ);
            }
            catch (\phpbb\filesystem\exception\filesystem_exception $e)
            {
                // Do nothing, the user will get a notice later
            }
        }
        else
        {
            $this->iohandler->add_error_message('UNABLE_TO_WRITE_CONFIG_FILE');
            throw new user_interaction_required_exception();
        }
        // Create a lock file to indicate that there is an install in progress
        $fp = @fopen($this->phpbb_root_path . 'cache/install_lock', 'wb');
        if ($fp === false)
        {
            // We were unable to create the lock file - abort
            $this->iohandler->add_error_message('UNABLE_TO_WRITE_LOCK');
            throw new user_interaction_required_exception();
        }
        @fclose($fp);
        try
        {
            $this->filesystem->phpbb_chmod($this->phpbb_root_path . 'cache/install_lock', 0777);
        }
        catch (\phpbb\filesystem\exception\filesystem_exception $e)
        {
            // Do nothing, the user will get a notice later
        }
    }
    /**
     * Returns the content which should be dumped to config.php
     *
     * @param bool        $debug                 If the debug constants should be enabled by default or not
     * @param bool        $debug_container     If the container should be compiled on
     *                                        every page load or not
     * @param string    $environment        The environment to use
     *
     * @return string    content to be written to the config file
     */
    protected function get_config_data($debug = false, $debug_container = false, $environment = null)
    {
        $config_content = "<?php\n";
        $config_content .= "// phpBB 3.2.x auto-generated configuration file\n// Do not change anything in this file!\n";
        $dbms = $this->install_config->get('dbms');
        $db_driver = $this->db_helper->get_available_dbms($dbms);
        $db_driver = $db_driver[$dbms]['DRIVER'];
        $config_data_array = array(
            'dbms'            => $db_driver,
            'dbhost'        => $this->install_config->get('dbhost'),
            'dbport'        => $this->install_config->get('dbport'),
            'dbname'        => $this->install_config->get('dbname'),
            'dbuser'        => $this->install_config->get('dbuser'),
            'dbpasswd'        => $this->install_config->get('dbpasswd'),
            'table_prefix'    => $this->install_config->get('table_prefix'),
            'phpbb_adm_relative_path'    => 'adm/',
            'acm_type'        => 'phpbb\cache\driver\file',
        );
        foreach ($config_data_array as $key => $value)
        {
            $config_content .= "\${$key} = '" . str_replace("'", "\\'", str_replace('\\', '\\\\', $value)) . "';\n";
        }
        $config_content .= "\n@define('PHPBB_INSTALLED', true);\n";
        $config_content .= "// @define('PHPBB_DISPLAY_LOAD_TIME', true);\n";
        if ($environment)
        {
            $config_content .= "@define('PHPBB_ENVIRONMENT', 'test');\n";
        }
        else if ($debug)
        {
            $config_content .= "@define('PHPBB_ENVIRONMENT', 'development');\n";
        }
        else
        {
            $config_content .= "@define('PHPBB_ENVIRONMENT', 'production');\n";
        }
        if ($debug_container)
        {
            $config_content .= "@define('DEBUG_CONTAINER', true);\n";
        }
        else
        {
            $config_content .= "// @define('DEBUG_CONTAINER', true);\n";
        }
        if ($environment === 'test')
        {
            $config_content .= "@define('DEBUG_TEST', true);\n";
            // Mandatory for the functional tests, will be removed by PHPBB3-12623
            $config_content .= "@define('DEBUG', true);\n";
        }
        return $config_content;
    }
    /**
     * {@inheritdoc}
     */
    static public function get_step_count()
    {
        return 1;
    }
    /**
     * {@inheritdoc}
     */
    public function get_task_lang_name()
    {
        return 'TASK_CREATE_CONFIG_FILE';
    }
}