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 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 138
acp_captcha
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
506
0.00% covered (danger)
0.00%
0 / 134
 main
0.00% covered (danger)
0.00%
0 / 1
462
0.00% covered (danger)
0.00%
0 / 126
 deliver_demo
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 8
<?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.
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}
class acp_captcha
{
    var $u_action;
    function main($id, $mode)
    {
        global $user, $template, $phpbb_log, $request;
        global $config, $phpbb_container;
        $user->add_lang('acp/board');
        /* @var $factory \phpbb\captcha\factory */
        $factory = $phpbb_container->get('captcha.factory');
        $captchas = $factory->get_captcha_types();
        $selected = $request->variable('select_captcha', $config['captcha_plugin']);
        $selected = (isset($captchas['available'][$selected]) || isset($captchas['unavailable'][$selected])) ? $selected : $config['captcha_plugin'];
        $configure = $request->variable('configure', false);
        // Oh, they are just here for the view
        if (isset($_GET['captcha_demo']))
        {
            $this->deliver_demo($selected);
        }
        // Delegate
        if ($configure)
        {
            $config_captcha = $factory->get_instance($selected);
            $config_captcha->acp_page($id, $this);
        }
        else
        {
            $config_vars = array(
                'enable_confirm'        => array(
                    'tpl'        => 'REG_ENABLE',
                    'default'    => false,
                    'validate'    => 'bool',
                    'lang'        => 'VISUAL_CONFIRM_REG',
                ),
                'enable_post_confirm'    => array(
                    'tpl'        => 'POST_ENABLE',
                    'default'    => false,
                    'validate'    => 'bool',
                    'lang'        => 'VISUAL_CONFIRM_POST',
                ),
                'confirm_refresh'        => array(
                    'tpl'        => 'CONFIRM_REFRESH',
                    'default'    => false,
                    'validate'    => 'bool',
                    'lang'        => 'VISUAL_CONFIRM_REFRESH',
                ),
                'max_reg_attempts'        => array(
                    'tpl'        => 'REG_LIMIT',
                    'default'    => 0,
                    'validate'    => 'int:0:99999',
                    'lang'        => 'REG_LIMIT',
                ),
                'max_login_attempts'    => array(
                    'tpl'        => 'MAX_LOGIN_ATTEMPTS',
                    'default'    => 0,
                    'validate'    => 'int:0:99999',
                    'lang'        => 'MAX_LOGIN_ATTEMPTS',
                ),
            );
            $this->tpl_name = 'acp_captcha';
            $this->page_title = 'ACP_VC_SETTINGS';
            $form_key = 'acp_captcha';
            add_form_key($form_key);
            $submit = $request->variable('main_submit', false);
            $error = $cfg_array = array();
            if ($submit)
            {
                foreach ($config_vars as $config_var => $options)
                {
                    $cfg_array[$config_var] = $request->variable($config_var, $options['default']);
                }
                validate_config_vars($config_vars, $cfg_array, $error);
                if (!check_form_key($form_key))
                {
                    $error[] = $user->lang['FORM_INVALID'];
                }
                if ($error)
                {
                    $submit = false;
                }
            }
            if ($submit)
            {
                foreach ($cfg_array as $key => $value)
                {
                    $config->set($key, $value);
                }
                if ($selected !== $config['captcha_plugin'])
                {
                    // sanity check
                    if (isset($captchas['available'][$selected]))
                    {
                        $old_captcha = $factory->get_instance($config['captcha_plugin']);
                        $old_captcha->uninstall();
                        $config->set('captcha_plugin', $selected);
                        $new_captcha = $factory->get_instance($config['captcha_plugin']);
                        $new_captcha->install();
                        $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_VISUAL');
                    }
                    else
                    {
                        trigger_error($user->lang['CAPTCHA_UNAVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
                    }
                }
                trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
            }
            else
            {
                $captcha_select = '';
                foreach ($captchas['available'] as $value => $title)
                {
                    $current = ($selected !== false && $value == $selected) ? ' selected="selected"' : '';
                    $captcha_select .= '<option value="' . $value . '"' . $current . '>' . $user->lang($title) . '</option>';
                }
                foreach ($captchas['unavailable'] as $value => $title)
                {
                    $current = ($selected !== false && $value == $selected) ? ' selected="selected"' : '';
                    $captcha_select .= '<option value="' . $value . '"' . $current . ' class="disabled-option">' . $user->lang($title) . '</option>';
                }
                $demo_captcha = $factory->get_instance($selected);
                foreach ($config_vars as $config_var => $options)
                {
                    $template->assign_var($options['tpl'], (isset($_POST[$config_var])) ? $request->variable($config_var, $options['default']) : $config[$config_var]) ;
                }
                $template->assign_vars(array(
                    'CAPTCHA_PREVIEW_TPL'    => $demo_captcha->get_demo_template($id),
                    'S_CAPTCHA_HAS_CONFIG'    => $demo_captcha->has_config(),
                    'CAPTCHA_SELECT'        => $captcha_select,
                    'ERROR_MSG'                => implode('<br />', $error),
                    'U_ACTION'                => $this->u_action,
                ));
            }
        }
    }
    /**
    * Entry point for delivering image CAPTCHAs in the ACP.
    */
    function deliver_demo($selected)
    {
        global $phpbb_container;
        $captcha = $phpbb_container->get('captcha.factory')->get_instance($selected);
        $captcha->init(CONFIRM_REG);
        $captcha->execute_demo();
        garbage_collection();
        exit_handler();
    }
}