Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 104
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
obtain_server_data
0.00% covered (danger)
0.00%
0 / 104
0.00% covered (danger)
0.00%
0 / 4
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 run
0.00% covered (danger)
0.00%
0 / 99
0.00% covered (danger)
0.00%
0 / 1
72
 get_step_count
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_task_lang_name
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 *
4 * This file is part of the phpBB Forum Software package.
5 *
6 * @copyright (c) phpBB Limited <https://www.phpbb.com>
7 * @license GNU General Public License, version 2 (GPL-2.0)
8 *
9 * For full copyright and license information, please see
10 * the docs/CREDITS.txt file.
11 *
12 */
13
14namespace phpbb\install\module\obtain_data\task;
15
16use phpbb\install\exception\user_interaction_required_exception;
17
18/**
19 * This class requests and saves some information about the server
20 */
21class obtain_server_data extends \phpbb\install\task_base implements \phpbb\install\task_interface
22{
23    /**
24     * @var \phpbb\install\helper\config
25     */
26    protected $install_config;
27
28    /**
29     * @var \phpbb\install\helper\iohandler\iohandler_interface
30     */
31    protected $io_handler;
32
33    /**
34     * Constructor
35     *
36     * @param \phpbb\install\helper\config                            $config        Installer's config
37     * @param \phpbb\install\helper\iohandler\iohandler_interface    $iohandler    Installer's input-output handler
38     */
39    public function __construct(\phpbb\install\helper\config $config,
40                                \phpbb\install\helper\iohandler\iohandler_interface $iohandler)
41    {
42        $this->install_config    = $config;
43        $this->io_handler        = $iohandler;
44
45        parent::__construct(true);
46    }
47    /**
48     * {@inheritdoc}
49     */
50    public function run()
51    {
52        $cookie_secure = $this->io_handler->is_secure();
53        $server_protocol = ($this->io_handler->is_secure()) ? 'https://' : 'http://';
54        $server_port = $this->io_handler->get_server_variable('SERVER_PORT', 0);
55
56        // HTTP_HOST is having the correct browser url in most cases...
57        $server_name = strtolower(html_entity_decode($this->io_handler->get_header_variable(
58            'Host',
59            $this->io_handler->get_server_variable('SERVER_NAME')
60        ), ENT_COMPAT));
61
62        // HTTP HOST can carry a port number...
63        if (strpos($server_name, ':') !== false)
64        {
65            $server_name = substr($server_name, 0, strpos($server_name, ':'));
66        }
67
68        $script_path = html_entity_decode($this->io_handler->get_server_variable('REQUEST_URI'), ENT_COMPAT);
69
70        if (!$script_path)
71        {
72            $script_path = html_entity_decode($this->io_handler->get_server_variable('PHP_SELF'), ENT_COMPAT);
73        }
74
75        $script_path = str_replace(array('\\', '//'), '/', $script_path);
76        $script_path = trim(dirname(dirname(dirname($script_path)))); // Because we are in install/app.php/route_name
77
78        // Server data
79        $cookie_secure        = $this->io_handler->get_input('cookie_secure', $cookie_secure);
80        $server_protocol    = $this->io_handler->get_input('server_protocol', $server_protocol);
81        $force_server_vars    = $this->io_handler->get_input('force_server_vars', 0);
82        $server_name        = $this->io_handler->get_input('server_name', $server_name, true);
83        $server_port        = $this->io_handler->get_input('server_port', $server_port);
84        $script_path        = $this->io_handler->get_input('script_path', $script_path, true);
85
86        // Clean up script path
87        if ($script_path !== '/')
88        {
89            // Adjust destination path (no trailing slash)
90            if (substr($script_path, -1) === '/')
91            {
92                $script_path = substr($script_path, 0, -1);
93            }
94
95            $script_path = str_replace(array('../', './'), '', $script_path);
96
97            if ($script_path[0] !== '/')
98            {
99                $script_path = '/' . $script_path;
100            }
101        }
102
103        // Check if data is sent
104        if ($this->io_handler->get_input('submit_server', false))
105        {
106            $this->install_config->set('cookie_secure', $cookie_secure);
107            $this->install_config->set('server_protocol', $server_protocol);
108            $this->install_config->set('force_server_vars', $force_server_vars);
109            $this->install_config->set('server_name', $server_name);
110            $this->install_config->set('server_port', $server_port);
111            $this->install_config->set('script_path', $script_path);
112        }
113        else
114        {
115            // Render form
116            $server_form = array(
117                'cookie_secure' => array(
118                    'label'            => 'COOKIE_SECURE',
119                    'description'    => 'COOKIE_SECURE_EXPLAIN',
120                    'type'            => 'radio',
121                    'options'        => array(
122                        array(
123                            'value'        => 0,
124                            'label'        => 'NO',
125                            'selected'    => (!$cookie_secure),
126                        ),
127                        array(
128                            'value'        => 1,
129                            'label'        => 'YES',
130                            'selected'    => ($cookie_secure),
131                        ),
132                    ),
133                ),
134                'force_server_vars' => array(
135                    'label'            => 'FORCE_SERVER_VARS',
136                    'description'    => 'FORCE_SERVER_VARS_EXPLAIN',
137                    'type'            => 'radio',
138                    'options'        => array(
139                        array(
140                            'value'        => 0,
141                            'label'        => 'NO',
142                            'selected'    => true,
143                        ),
144                        array(
145                            'value'        => 1,
146                            'label'        => 'YES',
147                            'selected'    => false,
148                        ),
149                    ),
150                ),
151                'server_protocol' => array(
152                    'label'            => 'SERVER_PROTOCOL',
153                    'description'    => 'SERVER_PROTOCOL_EXPLAIN',
154                    'type'            => 'text',
155                    'default'        => $server_protocol,
156                ),
157                'server_name' => array(
158                    'label'            => 'SERVER_NAME',
159                    'description'    => 'SERVER_NAME_EXPLAIN',
160                    'type'            => 'text',
161                    'default'        => $server_name,
162                ),
163                'server_port' => array(
164                    'label'            => 'SERVER_PORT',
165                    'description'    => 'SERVER_PORT_EXPLAIN',
166                    'type'            => 'text',
167                    'default'        => $server_port,
168                ),
169                'script_path' => array(
170                    'label'            => 'SCRIPT_PATH',
171                    'description'    => 'SCRIPT_PATH_EXPLAIN',
172                    'type'            => 'text',
173                    'default'        => $script_path,
174                ),
175                'submit_server' => array(
176                    'label'    => 'SUBMIT',
177                    'type'    => 'submit',
178                )
179            );
180
181            $this->io_handler->add_user_form_group('SERVER_CONFIG', $server_form);
182
183            throw new user_interaction_required_exception();
184        }
185    }
186
187    /**
188     * {@inheritdoc}
189     */
190    public static function get_step_count()
191    {
192        return 0;
193    }
194
195    /**
196     * {@inheritdoc}
197     */
198    public function get_task_lang_name()
199    {
200        return '';
201    }
202}